// 插件
const json = require("@rollup/plugin-json");
const rsv = require("@rollup/plugin-node-resolve");
const ts = require("rollup-plugin-typescript2");

const TargetName = process.env.Target;
console.log("TargetName:", TargetName)

// 根据要打包的模块获取对对应模块的配置信息
const path = require("path");

// 打包的目录
const packageDIr = path.resolve(__dirname, `packages/${TargetName}`);

console.log("packageDIr::", packageDIr)

// 获取详细路径
const getPath = (r) => {
    return path.resolve(packageDIr, r);
}


const pkg = getPath('package.json');
console.log("pkg::", pkg);


// 对打包类型做映射。
const output = { // 自定义配置
    'esm-bundle': {
        file: getPath(`dist/${TargetName}.esm-bundle.js`),
        format: 'es',
    },
    "cjs": {
        file: getPath(`dist/${TargetName}.cjs.js`),
        format: 'cjs',
    },
    'global': {
        file: getPath(`dist/${TargetName}.global.js`),
        format: 'iife', // iife 立即执行
    }
}

console.log("output:::", output);


// pkg 获取它里面的 formats
// 直接读取json文件 
const userCustomConfig = require(pkg);
console.log("userCustomConfig:", userCustomConfig.buildOptions);   

const BASE_CONIFG = userCustomConfig.buildOptions;


console.log("formats::", BASE_CONIFG);

function createConfig(formats='', output){
    console.log("@@@@@:::");
    console.log("formats:::", formats,output);
    output.name = BASE_CONIFG.name;
    output.sourcemap = true; // 生成sourcemap

    console.log({
        input: getPath('src/index.ts'),  
        output,
        plugins: [
            json(),
            ts(), // 需要tsconfig tsc --init
            rsv(),
        ]
    }, "@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@", path.resolve(__dirname, 'tsconfig.json'))

    // return {
    //     input: getPath('src/index.ts'),

    // };

    return {
        input: getPath('src/index.ts'),  
        output,
        plugins: [
            json(),
            // 顺序先ts在玩第三方
            ts({
                tsconfig: path.resolve(__dirname, 'tsconfig.json')
            }), // 需要tsconfig tsc --init  修改ts的配置文件 模块和目标都是ESNext 严格模式关了
            rsv(),
        ]
    }
}

const formats = BASE_CONIFG.formats.map(item => createConfig(item, output[item]))


module.exports = formats; 